有一个if条件如下
if [ "${1#*-}" = "$1" ]; then echo "Do something" fi
但是有人可以解释一下是什么意思${1#*-}
吗?
${1#*-}
删除变量中*-
类似glob的模式的最短匹配$1
.
例如abcdef-xyz-foo
- >xyz-foo
您的if
支票实际上是:
if $1 does not contain '-'
*-
是匹配(可能为空)字符串后跟a的模式-
.该#
运营商下降到最短前缀匹配*-
,从扩张$1
.一个例子:
$ foo="123-456" $ echo "${foo#*-}" 456 $ foo="123-456-789" 456-789
我强调最短,因为有一个伴随运算符##
丢弃最长的匹配前缀.
$ echo "${foo##*-}" 789